home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / Misc / Microtonal.h < prev    next >
C/C++ Source or Header  |  2005-03-14  |  3KB  |  112 lines

  1. /*
  2.   ZynAddSubFX - a software synthesizer
  3.  
  4.   Microtonal.h - Tuning settings and microtonal capabilities
  5.   Copyright (C) 2002-2005 Nasca Octavian Paul
  6.   Author: Nasca Octavian Paul
  7.  
  8.   This program is free software; you can redistribute it and/or modify
  9.   it under the terms of version 2 of the GNU General Public License 
  10.   as published by the Free Software Foundation.
  11.  
  12.   This program is distributed in the hope that it will be useful,
  13.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.   GNU General Public License (version 2) for more details.
  16.  
  17.   You should have received a copy of the GNU General Public License (version 2)
  18.   along with this program; if not, write to the Free Software Foundation,
  19.   Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  20.  
  21. */
  22.  
  23. #ifndef MICROTONAL_H
  24. #define MICROTONAL_H
  25.  
  26. #include "../globals.h"
  27. #include "XMLwrapper.h"
  28.  
  29. #define MAX_OCTAVE_SIZE 128
  30. #define MICROTONAL_MAX_NAME_LEN 120
  31.  
  32. #include <stdio.h>
  33.  
  34. class Microtonal{
  35.     public:
  36.     Microtonal();
  37.     ~Microtonal();
  38.     void defaults();
  39.     REALTYPE getnotefreq(int note,int keyshift);
  40.  
  41.     
  42.     //Parameters
  43.     //if the keys are inversed (the pitch is lower to keys from the right direction)    
  44.     unsigned char Pinvertupdown;
  45.  
  46.     //the central key of the inversion
  47.     unsigned char Pinvertupdowncenter;
  48.  
  49.     //0 for 12 key temperate scale, 1 for microtonal
  50.     unsigned char Penabled;
  51.  
  52.     //the note of "A" key
  53.     unsigned char PAnote;
  54.  
  55.     //the frequency of the "A" note
  56.     REALTYPE PAfreq;  
  57.     
  58.     //if the scale is "tuned" to a note, you can tune to other note
  59.     unsigned char Pscaleshift;
  60.  
  61.     //first and last key (to retune)
  62.     unsigned char Pfirstkey;
  63.     unsigned char Plastkey;
  64.     
  65.     //The middle note where scale degree 0 is mapped to
  66.     unsigned char Pmiddlenote;
  67.     
  68.     //Map size
  69.     unsigned char Pmapsize;
  70.  
  71.     //Mapping ON/OFF
  72.     unsigned char Pmappingenabled;
  73.     //Mapping (keys)
  74.     short int Pmapping[128];
  75.     
  76.     unsigned char Pglobalfinedetune;
  77.     
  78.     // Functions
  79.     unsigned char getoctavesize();
  80.     void tuningtoline(int n,char *line,int maxn);
  81.     int loadscl(const char *filename);//load the tunnings from a .scl file
  82.     int loadkbm(const char *filename);//load the mapping from .kbm file
  83.     int texttotunings(const char *text);
  84.     void texttomapping(const char *text);
  85.     unsigned char *Pname;
  86.     unsigned char *Pcomment;
  87.  
  88.         void add2XML(XMLwrapper *xml);
  89.         void getfromXML(XMLwrapper *xml);
  90.     int saveXML(char *filename);
  91.     int loadXML(char *filename);
  92.  
  93.     private:
  94.     int linetotunings(unsigned int nline,const char *line);
  95.     int loadline(FILE *file,char *line);//loads a line from the text file, while ignoring the lines beggining with "!"
  96.     unsigned char octavesize;
  97.     struct {
  98.         unsigned char type;//1 for cents or 2 for division
  99.  
  100.         // the real tuning (eg. +1.05946 for one halftone)
  101.         // or 2.0 for one octave
  102.         REALTYPE tuning;
  103.         
  104.         //the real tunning is x1/x2
  105.         unsigned int x1,x2;
  106.         
  107.     } octave[MAX_OCTAVE_SIZE],tmpoctave[MAX_OCTAVE_SIZE];
  108.     
  109. };
  110.  
  111. #endif
  112.